package com.spring.aop.demo1;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class MyJdkProxy implements InvocationHandler {
    private UserDao userDao;

    public MyJdkProxy (UserDao userDao) {
        this.userDao = userDao;
    }

    public Object createProxy () {
        // 第一个参数：类的加载器
        // 第二个参数：接口
        // 第三个参数：InvocationHandler
        Object proxy = Proxy.newProxyInstance(userDao.getClass().getClassLoader(), userDao.getClass().getInterfaces(), this);
        return proxy;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if ("save".equals(method.getName())) { // 如果是 save 方法，才会增强
            System.out.println("权限校验 ========================");
        }
        return method.invoke(userDao, args);
    }
}
